import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @作者 ： pwx5328113 @时间： 2023/3/7
 * @测试点: 打开快速负载均衡，3个节点，初始2个节点正常， 所有已有连接空闲不超过30s， 1个节点异常后恢复
 **/
public class JDBC_QuikAutoBalance_Case0012 {
	public static void main(String[] args) throws Exception {
		// start前，args[0] 包含3个节点，其中一个节点异常
		System.out.println(new Date() + "----------start----------");
		List<Connection> connections = new ArrayList<>();
		System.out.println(new Date() + "----------进行10个建连----------");
		String url1 = "jdbc:postgresql://" + args[0] + "/" + args[1] + "?" + args[4];
		for (int i = 0; i < 10; i++) {
			try {
				Connection connection = DriverManager.getConnection(url1, args[2], args[3]);
				connections.add(connection);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println(new Date() + "----------sleep 15s，更新连接状态----------");
		TimeUnit.SECONDS.sleep(15);
		for (int i = 0; i < connections.size(); i++) {
			System.out.print(connections.get(i)+"：");
			System.out.println(connections.get(i).isValid(3));
		}

		System.out.println(new Date() + "----------sleep 65s----------");
		TimeUnit.SECONDS.sleep(65);
		// sleep后，等待10s左右恢复异常节点，再等待55s
		// sleep过程中，观测后台kill连接情况

		System.out.println(new Date() + "----------再次进行20个建连----------");
		for (int i = 0; i < 20; i++) {
			try {
				Connection connection = DriverManager.getConnection(url1, args[2], args[3]);
				connections.add(connection);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println(new Date() + "----------sleep 10s----------");
		TimeUnit.SECONDS.sleep(10);
		// sleep过程中，数据库实际节点查询上个操作每个节点实际连接数
		System.out.println(new Date() + "----------connections close start----------");
		for (Connection connection : connections) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println(new Date() + "----------connections close end----------");
	}
}
